שיעור מספר 3: "מחלקות וטיפוסים"

Size: px
Start display at page:

Download "שיעור מספר 3: "מחלקות וטיפוסים""

Transcription

1 שיעור מספר 3: "מחלקות וטיפוסים" בית הספר למדעי המחשב

2 על סדר היום מודל הזיכרון של Java Heap and Stack העברת ארגומנטים מנגנוני שפת Java עצמים ושירותי מופע 2

3 העברת ארגומנטים כאשר מתבצעת קריאה לשרות, ערכי הארגומנטים נקשרים לפרמטרים הפורמליים של השרות לפי הסדר, ומתבצעת השמה לפני ביצוע גוף השרות. בהעברת ערך לשרות הערך מועתק לפרמטר הפורמלי צורה זאת של העברת פרמטרים נקראת call by value כאשר הארגומנט המועבר הוא הפנייה )התייחסות, )reference העברת הפרמטר מעתיקה את ההתייחסות. בשפות תכנות אחרות ניתן לבצע העברה של המצביע עצמו גם reference מועבר by value ב Java 3

4 ע) העברת פרמטרים by value העברת פרמטרים by value "י העתקה( יוצרת מספר מקרים מבלבלים, שידרשו מאיתנו הכרות מעמיקה יותר עם מודל הזיכרון של Java למשל, מה מדפיס הקוד הבא? public class CallByValue { public static void settofive(int arg){ arg = 5; public static void main(string[] args) { int x = 0; System.out.println("Before: x=" + x); settofive(x); System.out.println("After: x=" + x); 4

5 מודל הזיכרון של Java STACK HEAP משתנים גלובלים ועצמים אינו תלוי במתודה הנוכחית שרצה משתנים מקומיים וארגומנטים כל מתודה משתמשת באזור מסוים של המחסנית CODE קוד התוכנית 5

6 Primitives by value println משתנים מקומיים וארגומנטים כל מתודה משתמשת באזור מסוים של main המחסנית x 0 args STACK HEAP משתנים גלובלים ועצמים אינו תלוי במתודה הנוכחית שרצה [ ] Before: x=0 public class CallByValue { public static void settofive(int arg){ arg = 5; CODE public static void main(string[] args) { int x = 0; System.out.println("Before: x=" + x); settofive(x); System.out.println("After: x=" + x); 6

7 Primitives by value settofive STACK HEAP arg 50 main args x 0 [ ] Before: x=0 public class CallByValue { public static void settofive(int arg){ arg = 5; CODE public static void main(string[] args) { int x = 0; System.out.println("Before: x=" + x); settofive(x); System.out.println("After: x=" + x); ש settofive println מסיימת לאחר את אתריצתה המקום שהוקצה משוחרר עלעלה- ה- Stack עבורה 7

8 Primitives by value println STACK HEAP After: x=0 main args x 0 [ ] Before: x=0 public class CallByValue { public static void settofive(int arg){ arg = 5; CODE public static void main(string[] args) { int x = 0; System.out.println("Before: x=" + x); settofive(x); System.out.println("After: x=" + x); ש println main מסיימת את מסיימת לאחר את ריצתה ריצתה המקום המקום שהוקצה שהוקצה משוחרר Stack על ה- עבורה 8

9 שמות מקומיים בדוגמא ראינו כי הפרמטר הפורמלי arg הארגומנט x קיבל את הערך של בחירת השמות השונים אינה משמעותית - יכולנו לקרוא לשני המשתנים באותו שם ולקבל התנהגות זהה שם של משתנה מקומי מסתיר משתנים בשם זהה הנמצאים בתחום עוטף או גלובלים נראה את ההתנהגות הזו בהמשך השיעור, בדוגמא של בנאים. מתודה מכירה רק משתני מחסנית הנמצאים באזור שהוקצה לה על המחסנית )frame( 9

10 מה יקרה אם המשתנה המקומי x שהועבר היה מטיפוס הפנייה? למשל, מה מדפיס הקוד הבא? import java.util.arrays; //explained later... public class CallByValue { public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 10

11 Arrays.toString Reference by value STACK HEAP 4 [4,5] main arr args 5 [ ] public class CallByValue { CODE public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 11

12 println Reference by value STACK HEAP 4 [4,5] main arr args 5 [ ] Before: arr= Before: arr= [4,5] public class CallByValue { CODE public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 12

13 settozero main arr arr args Reference by value STACK HEAP [ ] 0 [4,5] Before: arr= Before: arr= [4,5] public class CallByValue { CODE public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 13

14 Reference by value STACK HEAP Arrays.toString [4,5] 4 [4,5] main arr args 5 [ ] Before: arr= Before: arr= [4,5] public class CallByValue { CODE public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 14

15 println main arr args Reference by value STACK HEAP 4 5 [ ] After: arr= [4,5] [4,5] Before: arr= After: arr= [4,5] Before: arr= [4,5] public class CallByValue { CODE public static void settozero(int [] arr){ arr = new int[3]; public static void main(string[] args) { int [] arr = {4,5; System.out.println("Before: arr=" + Arrays.toString(arr)); settozero(arr); System.out.println("After: arr=" + Arrays.toString(arr)); 15

16 הפונקציה הנקראת והעולם שבחוץ בשיטת העברה by value לא יעזור למתודה לשנות את הארגומנט שקיבלה, מכיוון שהיא מקבלת עותק אז איך יכולה מתודה להשפיע על ערכים במתודה שקראה לה? ע"י ערך מוחזר ע"י גישה למשתנים או עצמים שהוקצו ב- Heap מתודות שמשנות את תמונת הזיכרון נקראות בהקשרים מסוימים Mutators או Transformers 16

17 מה מדפיסה התוכנית הבאה? public class CallByValue { static int global = 4; public static int increment(int [] arr){ int local = 5; arr[0]++; global++; return local; public static void main(string[] args) { int [] arr = {4; System.out.println("Before:\narr[0]=" + arr[0] + "\nglobal=" + global); int result = increment(arr); System.out.println("After:\narr[0]=" + arr[0] + "\nglobal=" + global); System.out.println("result = " + result); 17

18 println STACK HEAP 4 main arr args CallByValue.global 4 [ ] Before: arr[0]=4 global=4 public class CallByValue { static int global = 4; CODE public static int increment(int [] arr){ int local = 5; arr[0]++; global++; return local; public static void main(string[] args) { int [] arr = {4; System.out.println("Before:\narr[0]=" + arr[0] + "\nglobal=" + global); int result = increment(arr); System.out.println("After:\narr[0]=" + arr[0] + "\nglobal=" + global); System.out.println("result = " + result); 18

19 increment local 5 STACK HEAP main arr result arr args CallByValue.global 45 [ ] After: arr[0]=5 global=5 Before: arr[0]=4 global=4 public class CallByValue { static int global = 4; CODE public static int increment(int [] arr){ int local = 5; arr[0]++; global++; return local; public static void main(string[] args) { int [] arr = {4; System.out.println("Before:\narr[0]=" + arr[0] + "\nglobal=" + global); int result = increment(arr); System.out.println("After:\narr[0]=" + arr[0] + "\nglobal=" + global); System.out.println("result = " + result); 19

20 println STACK HEAP result = 5 main result arr args 5 5 CallByValue.global 5 [ ] After: arr[0]=5 global=5 Before: arr[0]=4 global=4 public class CallByValue { static int global = 4; CODE public static int increment(int [] arr){ int local = 5; arr[0]++; global++; return local; public static void main(string[] args) { int [] arr = {4; System.out.println("Before:\narr[0]=" + arr[0] + "\nglobal=" + global); int result = increment(arr); System.out.println("After:\narr[0]=" + arr[0] + "\nglobal=" + global); System.out.println("result = " + result); 20

21 println Heap, Heap Hooray! 5 STACK HEAP result = 5 main result arr args 5 5 CallByValue.global 5 [ ] After: arr[0]=5 global=5 Before: arr[0]=4 global=4 public class CallByValue { static int global = 4; CODE public static int increment(int [] arr){ int local = 5; arr[0]++; global++; return local; public static void main(string[] args) { int [] arr = {4; System.out.println("Before: arr[0]=" + arr[0] + "\tglobal=" + global); int result = increment(arr); System.out.println("After: arr[0]=" + arr[0] + "\tglobal=" + global); System.out.println("result = " + result); 21

22 משתני פלט Parameters( )Output איך נכתוב פונקציה שצריכה להחזיר יותר מערך אחד? הפונקציה תחזיר מערך ומה אם הפונקציה צריכה להחזיר נתונים מטיפוסים שונים? הפונקציה תקבל כארגומנטים הפניות לעצמים שהוקצו ע"י הקורא לפונקציה )למשל הפניות למערכים(, ותמלא אותם בערכים משמעותיים ומה קורה אם נרצה שהפונקציה לא תחזיר ערך במקרים מסויימים? החל מ Java 8 המחלקה Optional עוזרת לדמות את ההתנהגות הרצויה, נראה אותה בהמשך הקורס. 22

23 גושי אתחול סטטיים ראינו כי אתחול המשתנה הסטטי התרחש מיד לאחר טעינת המחלקה לזיכרון, עוד לפני פונקצית ה main ניתן לבצע פעולות נוספות )בדרך כלל אתחולים למניהם( מיד לאחר טעינת המחלקה לזיכרון, פעולות אלו יש לציין בתוך בלוק static פרטים נוספים: OO/initial.html 23

24 תמונת הזיכרון האמיתית מודל הזיכרון שתואר כאן הוא פשטני פרטים נוספים נשמרים על המחסנית וב- Heap רבים תמונת הזיכרון האמיתית והמדויקת היא תלוית סביבה ועשויה להשתנות בריצות בסביבות השונות נושא זה נידון בהרחבה בקורס "קומפילציה" 24

25 המחלקה כספריה של שרותים תוכנה 1 בשפת 25 Java

26 המחלקה כספריה של שרותים ניתן לראות במחלקה ספריה של שרותים, מודול: פונקציות עם מכנה משותף אוסף של רוב המחלקות ב,Java נוסף על היותן ספריה, משמשות גם כטיפוס נתונים. ככאלו הן מכילות רכיבים נוספים פרט לשרותי מחלקה. נדון במחלקות אלו בהמשך השיעור ואולם קיימות ב- Java גם כמה מחלקות המשמשות כספריות בלבד. בין השימושיות שבהן: java.lang.math java.util.arrays java.lang.system 26

27 חבילות ומרחב השמות מרחב השמות של Java הוא היררכי בדומה לשמות תיקיות במערכת הקבצים חבילה )package( רקורסיבית יכולה להכיל מחלקות או תת-חבילות בצורה שמה המלא של מחלקה name( )fully qualified כולל את שמות כל החבילות שהיא נמצאת בהן מהחיצונית ביותר עד לפנימית. שמות החבילות מופרדים בנקודות מקובל כי תוכנה הנכתבת בארגון מסוים משתמש בשם התחום האינטרנטי של אותו ארגון כשם החבילות העוטפות 27

28 חבילות ומרחב השמות קיימת התאמה בין מבנה התיקיות ( directories, )folders בפרויקט תוכנה ובין חבילות הקוד )packages( 28

29 חבילות ומרחב השמות כיצד נריץ תוכנית אשר נמצאת ב package כלשהו? ב eclipse ב command line 29

30 משפט import שימוש בשמה המלא של מחלקה מסרבל את הקוד: System.out.println("Before: x=" + java.util.arrays.tostring(arr)); ניתן לחסוך שימוש בשם מלא ע"י ייבוא השם בראש הקובץ )מעל הגדרת המחלקה( import java.util.arrays;... System.out.println("Before: x=" + Arrays.toString(arr)); 30

31 משפט import כאשר עושים שימוש נרחב במחלקות מחבילה מסויימת לייבא את שמות כל המחלקות במשפט import יחיד: ניתן import java.util.*;... System.out.println("Before: x=" + Arrays.toString(arr)); השימוש ב-* אינו רקורסיבי, כלומר יש צורך במשפט import נפרד עבור כל תת חבילה: // for classes directly under subpackage import package.subpackage.*; // for classes directly under subsubpackage1 import package.subpackage.subsubpackage1.*; // only for the class SomeClass import package.subpackage.subsubpackage2.someclass; 31

32 משפט static import החל מ Java5 ניתן לייבא למרחב השמות את השרות או המשתנה הסטטי import( )static ובכך להימנע מציון שם המחלקה בגוף הקוד: package il.ac.tau.cs.software1.examples; import static il.ac.tau.cs.software1.examples.someotherclass.somemethod; public class SomeClass { public static void main(string[] args) { somemethod(); * גם ב static import ניתן להשתמש ב- 32

33 הערות על מרחב השמות ב- Java שימוש במשפט import אינו שותל קוד במחלקה והוא נועד לצורכי נוחות בלבד אין צורך לייבא מחלקות מאותה חבילה אין צורך לייבא את החבילה java.lang ייבוא כוללני מדי של שמות מעיד על צימוד חזק בין מודולים ייבוא של חבילות עם מחלקות באותו שם יוצר ambiguity של הקומפיילר וגורר טעות קומפילציה )"התנגשות שמות"( סביבות הפיתוח המודרניות יודעות לארגן בצורה אוטומטית את משפטי ה import כדי להימנע מייבוא גורף מדי pollution"( )"name 33

34 CLASSPATH איפה נמצאות המחלקות? איך יודעים הקומפיילר וה- JVM היכן לחפש את המחלקות המופיעות בקוד המקור או ה?byte code קיים משתנה סביבה בשם CLASSPATH המכיל שמות של תיקיות במערכת הקבצים שם יש לחפש מחלקות הנזכרות בתוכנית ה- CLASSPATH מכיל את תיקיות ה"שורש" של חבילות המחלקות ניתן להגדיר את המשתנה בכמה דרכים: הגדרת המשתנה בסביבה )תלוי במערכת ההפעלה( הגדרה אד-הוק ע"י הוספת תיקיות חיפוש בשורת הפקודה הדגל cp או )classpath הגדרת תיקיות החיפוש בסביבת הפיתוח )בעזרת 34

35 jar כאשר ספקי תוכנה נותנים ללקוחותיהם מספר גדול של מחלקות הם יכולים לארוז אותן כארכיב התוכנית )Java ARchive( jar אורזת מספר מחלקות לקובץ אחד תוך שמירה על מבנה החבילות הפנימי שלהן הפורמט תואם למקובל בתוכנות דומות כגון zip, tar, rar ואחרות כדי להשתמש במחלקות הארוזות אין צורך לפרוס את קובץ ה- jar ניתן להוסיפו ל CLASSPATH של התוכנית התוכנית jar היא חלק מה- JDK מתוך סביבת הפיתוח וניתן להשתמש בה משורת הפקודה או 35

36 API and Javadoc קובץ ה- jar עשוי שלא להכיל קובצי מקור כלל, אלא רק קובצי class )למשל משיקולי זכויות יוצרים( איך יכיר לקוח שקיבל jar מספק תוכנה כלשהו את הפונקציות והמשתנים הנמצאים בתוך ה-,jar כדי שיוכל לעבוד איתם? בעולם התוכנה מקובל לספק ביחד עם הספריות גם מסמך תיעוד, המפרט את שמות וחתימות המחלקות, השרותים והמשתנים יחד עם תיאור מילולי של אופן השימוש בהם תוכנה בשם javadoc מחוללת תיעוד אוטומטי html הערות התיעוד שהופיעו בגוף קובצי המקור בפורמט על בסיס )Application Programming Interface( תיעוד זה מכונה API תוכנת ה javadoc היא חלק מה- JDK הפקודה או מתוך סביבת הפיתוח וניתן להשתמש בה משורת 36

37 Javadoc /** Documentation for the package */ package somepackage; /** Documentation for the class your name here */ public class SomeClass { /** Documentation for the class variable */ public static int somevariable; /** Documentation for the class method x documentation for parameter x y documentation for parameter y * documentation for return value */ public static int somemethod(int x, int y, int z){ // this comment would NOT be included in the documentation return 0; 37

38 Javadoc כך זה ניראה ב :eclipse חלק מדף ה html שנוצר 38

39 Java API ניתן למצוא את התיעוד של כל ספריות ה Java באמצעות javadoc באתר של חברת.Oracle 39

40 תיעוד וקוד בעזרת מחולל קוד אוטומטי הופך התיעוד לחלק בלתי נפרד מקוד התוכנית הדבר משפר את הסיכוי ששינויים עתידיים בקוד יופיעו מיידית גם בתיעוד וכך תשמר העקביות בין השניים 40

41 מחלקות כטיפוסי נתונים תוכנה 1 בשפת 41 Java

42 מחלקות כטיפוסי נתונים ביסודה של גישת התכנות מונחה העצמים קיימת ההנחה שניתן לייצג ישויות מעולם הבעיה ע"י ישויות בשפת התכנות בכתיבת מערכת תוכנה בתחום מסוים,)domain( נרצה לתאר את המרכיבים השונים באותו תחום כטיפוסים ומשתנים בתוכנית המחשב התחומים שבהם נכתבות מערכות תוכנה מגוונים: בנקאות, ספורט, תרופות, מוצרי צריכה, משחקים ומולטימדיה, פיסיקה ומדע, מנהלה, מסחר ושרותים... יש צורך בהגדרת טיפוסי נתונים שישקפו את התחום, כדי שנוכל לעלות ברמת ההפשטה שבה אנו כותבים תוכניות 42

43 מחלקות כטיפוסי נתונים מחלקות מגדירות טיפוסים שהם הרכבה של טיפוסים אחרים )יסודיים או מחלקות בעצמם( )object( מופע )instance( של מחלקה נקרא עצם בשפת Java הגישה לעצמים היא באמצעות טיפוסי הפניה לעצם לא ניתן לגשת לעצם עצמו. כל מופע עשוי להכיל: נתונים fields( )data members, instance שרותים methods( )instance פונקציות אתחול )בנאים, )constructors 43

44 מחלקות ועצמים כבר ראינו בקורס שימוש בטיפוסים שאינם פרימיטיביים: מחרוזת ומערך גם ראינו שעקב שכיחות השימוש בהם יש להם הקלות תחביריות מסוימות )פטור מ- new והעמסת אופרטור +( ראינו כי עבודה עם טיפוסים אלה מערבת שתי ישויות נפרדות: העצם: המכיל את המידע ההפנייה: משתנה שדרכו ניתן לגשת לעצם זאת בשונה ממשתנים יסודיים )טיפוסים פרימיטיביים( int i =5, j = 7; String s = "Hello", t = "World"; דוגמא: ו- "world" הם מופעים של "hello" כשם ש int הם מופעים של j ו- i s.string ו t הם הפניות למחרוזות. 44

45 שרותי מופע למחלקות יש שרותי מופע פונקציות אשר מופעלות על מופע מסוים של המחלקה תחביר של הפעלת שרות מופע הוא: לדוגמא: זאת בשונה מזימון שרות מחלקה לדוגמא: objref.methodname(arguments) String str = "SupercaliFrajalistic"; int len = str.length(); :)static( ClassName.methodName(arguments) String.valueOf(15); // returns the string 15 שימו של כי האופרטור נקודה ).( משמש בשני המקרים בתפקידים שונים לגמרי! 45

46 שימוש במחלקות קיימות לטיפוס מחלקה תכונות בסיסיות, אשר סיפק כותב המחלקה, ואולם ניתן לבצע עם העצמים פעולות מורכבות יותר ע"י שימוש באותן תכונות את התכונות הבסיסיות יכול הספק לציין למשל בקובץ תיעוד תיעוד נכון יתאר מה השרותים הללו עושים ולא איך הם ממומשים התיעוד יפרט את חתימת השרותים ואת החוזה שלהם נתבונן במחלקה Turtle המייצגת צב לוגו המתקדם על משטח ציור כאשר זנבו למטה הוא מצייר קו במסלול ההתקדמות כאשר זנבו למעלה הוא מתקדם ללא ציור כותב המחלקה לא סיפק את הקוד שלה אלא רק עמוד תיעוד המתאר את הצב )המחלקה ארוזה ב JAR של קובצי )class 46

47 Turtle API בנאי פונקצית אתחול - ניתן לייצר מופעים חדשים של המחלקה ע"י קריאה לבנאי עם האופרטור new נפריד בין 2 שרותים סוגים שונים: שרותי מחלקה אינם מתייחסים לעצם מסוים, מסומנים static שרותי מופע שרותים אשר מתייחסים לעצם מסוים. יופנו לעצם מסוים ע"י שימוש באופרטור הנקודה

48 Turtle API סוגים של שרותי מופע:.1 שאילתות )queries( שרותים שיש להם ערך מוחזר בדרך כלל לא משנים את מצב העצם בשיעור הבא נדון בסוגים שונים של שאילתות פקודות )commands(.2 שרותים ללא ערך מוחזר בדרך כלל משנים את מצב העצם שעליו הם פועלים 48

49 דוגמת שימוש public class TurleClient { public static void main(string[] args) { Turtle leonardo = new Turtle(); if(!leonardo.istaildown()) leonardo.taildown(); leonardo.moveforward(50); leonardo.turnright(90); leonardo.moveforward(50); leonardo.turnright(90); leonardo.moveforward(50); leonardo.turnright(90); leonardo.moveforward(50); leonardo.turnright(90); 49

50 עוד דוגמת שימוש public class TurleClient { public static void main(string[] args) { Turtle leonardo = new Turtle(); leonardo.taildown(); drawsquarepattern(leonardo, 50, 10); public static void drawsquare(turtle t, int size) { for (int i = 0; i < 4; i++) { t.moveforward(size); t.turnright(90); public static void drawsquarepattern(turtle t, int size, int angle) { for (int i = 0; i < 360/angle; i++) { drawsquare(t, size); t.turnright(angle); 50

51 האם המחלקה צריכה להכיל כל שירות אפשרי? מדוע המחלקה Turtle לא הכילה מלכתחילה את השרותים? drawsquarepattern ו- drawsquare יש לכך יתרונות וחסרונות איך לימדנו את הצב את התעלולים החדשים? נשים לב להבדל בין השירותים הסטטיים שמקבלים עצם כארגומנט ומבצעים עליו פעולות ובין שרותי המופע אשר אינם מקבלים את העצם כארגומנט מפורש )העצם מועבר מאחורי הקלעים( 51

52 הגדרת טיפוסים חדשים תוכנה 1 בשפת 52 Java

53 The cookie cutter כאשר מכינים עוגיות מקובל להשתמש בתבנית ברזל או פלסטיק כדי ליצור עוגיות בצורות מעניינות )כוכבים( תבנית העוגיות cutter( )cookie היא מעין מחלקה ליצירת עוגיות העוגיות עצמן הן מופעים )עצמים( שנוצקו מאותה תבנית כאשר ה JVM טוען לזכרון את קוד המחלקה עוד לא נוצר אף מופע של אותה המחלקה. המופעים יווצרו בזמן מאוחר יותר כאשר הלקוח של המחלקה יקרא מפורשות לאופרטור new אם יש לנו תבנית לעוגיות, זה לא אומר שיש לנו עוגיות. התבנית מגדירה את הצורה של העוגיות, אבל לא את הטעם שלהן )וניל? שוקולד?( 53

54 דוגמא נתבונן במחלקה MyDate לייצוג תאריכים: public class MyDate { int day; int month; int year; שימו לב! המשתנים month,day ו- year הוגדרו ללא המציין static ולכן בכל מופע עתידי של עצם מהמחלקה MyDate יופיעו השדות האלה שאלה: כאשר ה JVM טוען לזיכרון את המחלקה איפה בזיכרון נמצאים השדות month,day ו-?year תשובה: הם עוד לא נמצאים! הם יווצרו רק כאשר לקוח ייצר מופע )עצם, אובייקט( מהמחלקה 54

55 לקוח של המחלקה MyDate לקוח של המחלקה הוא קטע קוד המשתמש ב- MyDate למשל: כנראה שמי שכותב יישום של יומן פגישות צריך להשתמש במחלקה דוגמא: public class MyDateClient { public static void main(string[] args) { MyDate d1 = new MyDate(); d1.day = 29; d1.month = 2; d1.year = 1984; System.out.println(d1.day + "/" + d1.month + "/" + d1.year); בדוגמא אנו רואים: שימוש באופרטור ה new ליצירת מופע חדש מטיפוס MyDate שימוש באופרטור הנקודה לגישה לשדה של המופע המוצבע ע"י d1 55

56 אם שרות, אז עד הסוף האם התאריך d1 מייצג תאריך תקין? מה יעשה כותב היומן כאשר יצטרך להזיז את הפגישה בשבוע? האם += 7 d1.day? כמו כן, אם למחלקה כמה לקוחות שונים אצל כל אחד מהלקוחות אזי הלוגיקה הזו תהיה משוכפלת אחריותו של מי לוודא את תקינות התאריכים ולממש את הלוגיקה הנלווית? המחלקה היא גם מודול. אחריותו של הספק כותב המחלקה לממש את כל הלוגיקה הנלווית לייצוג תאריכים כדי לאכוף את עקביות המימוש )משתמר המחלקה( על משתני המופע להיות פרטיים 56

57 public class MyDate { private int day; private int month; private int year; public static void incrementdate(mydate d){ // changes d to be the consequent day בהמשך ניראה מימוש אחר של השירותים של.MyData במימוש זה, לא נצטרך לשלוח את d כפרמטר לשירותים. public static String tostring(mydate d){ return d.day + "/" + d.month + "/" + d.year; public static void setday(mydate d, int day){ /* changes the day part of d to be day if * the resulting date is legal */ public static int getday(mydate d){ return d.day; private static boolean islegal(mydate d){ // returns if d represents a legal date // more... תוכנה 1 בשפת Java 57

58 נראות פרטית מכיוון שהשדות day,month ו- year הוגדרו בנראות פרטית )private( לא ניתן להשתמש בהם מחוץ למחלקה )שגיאת קומפילציה( public class MyDateClient { public static void main(string[] args) { MyDate d1 = new MyDate(); d1.day = 29; d1.month = 2; d1.year = 1984; כדי לשנות את ערכם יש להשתמש בשרותים הציבוריים שהוגדרו לשם כך 58

59 לקוח של המחלקה MyDate public class MyDateClient { public static void main(string[] args) { MyDate d1 = new MyDate(); MyDate.setDay(d1, 29); MyDate.setMonth(d1, 2); MyDate.setYear(d1, 1984); System.out.println(MyDate.toString(d1)); כעת הדוגמא מתקמפלת אך עדיין נותרו בה שתי בעיות: השימוש בפונקציות גלובליות )סטטיות( מסורבל עבור כל פונקציה אנו צריכים להעביר את d1 כארגומנט מיד לאחר השימוש באופרטור ה new קיבלנו עצם במצב לא עיקבי עד לביצוע השמת התאריכים הוא מייצג את התאריך הלא חוקי 0/0/00 59

60 שרותי מופע כדי לפתור את הבעיה הראשונה, נשתמש בסוג שני של שרותים הקיים ב Java שרותי מופע שירותי מופע הם שרותים המשויכים למופע מסוים הפעלה שלהם נחשבת כבקשה או שאלה מעצם מסוים והיא מתבצעת בעזרת אופרטור הנקודה בגלל שהבקשה היא מעצם מסוים, כארגומנט לפונקציה אין צורך להעביר אותו מאחורי הקלעים הקומפיילר מייצר משתנה בשם this ומעביר אותו לפונקציה, ממש כאילו העביר אותו המשתמש בעצמו 60

61 ממתקים להמונים ניתן לראות בשרותי מופע סוכר תחבירי sugar( )syntactic לשרותי מחלקה ניתן לדמיין את שרות המופע ()m של מחלקה C כאילו היה שרות מחלקה )סטטי( המקבל עצם מהטיפוס C כארגומנט: public class C { public void m(args){... public static void m(c thisobj, args) { 61

62 ממתקים להמונים בראייה זו, הקריאות למתודה ()m של לקוחות המחלקה C יתורגמו ע"י העברת ההפניה שעליה בוצעה הקריאה כארגומנט לשרות הסטטי: public class SomeClient { public static void main(string[] args) { C obj = new C(); obj.m(args); C.m(obj,args) 62

63 "לא מה שחשבת" שרותי מופע מספקים תכונה נוספת ל Java התחבירי פרט לסוכר בהמשך הקורס נראה כי לשרותי המופע ב Java תפקיד מרכזי בשיגור שרותים דינאמי dispatch(,)dynamic תכונה בשפה המאפשרת החלפת המימוש בזמן ריצה ופולימורפיזם תאור שרותי מופע כסוכר תחבירי הוא פשטני )ושגוי!( אך נותן אינטואיציה טובה לגבי פעולת השרות בשלב זה של הקורס 63

64 public class MyDate { private int day; private int month; private int year; הקוד הזה חוקי! המשתנה this מוכר בתוך שרותי המופע כאילו הועבר ע"י המשתמש. public static void incrementdate(mydate d){ // changes itself to be the consequent day אולם לא חובה להשתמש בו public static String tostring(mydate d){ return this. d.day + "/" + this. d.month + "/" + this. d.year; public static void setday(mydate d, int day){ /* changes the day part of itself to be day if * the resulting date is legal */ public static int getday(mydate d){ return this. d.day; private static boolean islegal(mydate d){ // returns if the argument represents a legal date // more... 64

65 public class MyDate { private int day; private int month; private int year; public void incrementdate(){ // changes current object to be the consequent day public String tostring(){ return day + "/" + month + "/" + year; public void setday(int day){ /* changes the day part of the current object to be day if * the resulting date is legal */ public int getday(){ return day; private boolean islegal(){ // returns if the current object represents a legal date // more... 65

66 בנאים )constructors( כדי לפתור את הבעיה שהעצם אינו מכיל ערך תקין מיד עם יצירתו נגדיר עבור המחלקה בנאי בנאי הוא פונקצית אתחול הנקראת ע"י אופרטור ה new מיד אחרי שהוקצה מקום לעצם החדש. שמה כשם המחלקה שהיא מאתחלת וחתימתה אינה כוללת ערך מוחזר המוטיבציה המרכזית להגדרת בנאים היא יצירת עצם שהוא עקבי עם השימוש המיועד שלו )בהמשך נדבר על משתמר מחלקה ומצב מופשט בעל משמעות( למשל, נרצה שהאובייקט ה MyDate שאנחנו מייצרים יכיל תאריך חוקי מיד עם יצירתו 66

67 public class MyDate { public MyDate(int day, int month, int year) { this.day = day; this.month = month; this.year = year; הגדרת בנאי ל MyDate //... public class MyDateClient { קוד לקוח המשתמש ב- MyDate public static void main(string[] args) { MyDate d1 = new MyDate(29,2,1984); d1.incrementdate(); System.out.println(d1.toString()); 67

68 בנאים האם ניתן לוותר על השימוש ב this בבנאי שהגדרנו? public class MyDate { public MyDate(int day, int month, int year) { this.day = day; this.month = month; this.year = year; כעת מופיעה בקוד ההשמה הבאה: day=day; בגלל ששם השדה זהה לשם הפרמטר, הורדת השימוש ב this מייצרת השמה חסרת משמעות אשר אינה מאתחלת את השדה.day

69 בנאי ברירת מחדל במידה ולא הוגדר אף בנאי למחלקה, נוצר בנאי ברירת מחדל.)default constructor( בנאי ברירת המחדל מתנהג בדיוק כמו הבנאי הבא: public class MyDate { public MyDate() { ומאפשר יצירה של אובייקט מטיפוס MyDate באופן הבא: public static void main(string[] args) { MyDate d1 = new MyDate();

70 בנאים לאילו ערכים מאותחלים שדות מחלקה שלא אותחלו בבנאי? שדות של מחלקות מאותחלים אוטומטית לערכים הדיפולטיים של כל טיפוס false(,0(, null, כך שאין חובה לאתחל ערכים אלה בבנאי. זכרון שמוקצה על ה Heap מאותחל אוטומטית.

71 בנאים האם הקוד הבא יתקמפל? public class MyDate { public MyDate(int day, int month, int year) { this.day = day; this.month = month; this.year = year; public static void main(string[] args) { MyDate d1 = new MyDate(); בנאי ברירת מחדל נוצר רק כאשר לא הוגדר אף בנאי אחר במחלקה. אם קיים מימוש של בנאי כלשהו, הבנאי הריק לא נוצר אוטומטית ויש לממש אותו בקוד במידה ונרצה להשתמש בו.

72 מודל הזיכרון של זימון שרותי מופע

73 מודל הזיכרון של זימון שרותי מופע בדוגמא הבאה נראה כיצד מייצר הקומפיילר עבורנו את ההפניה this עבור כל בנאי וכל שרות מופע נתבונן במחלקה Point המייצגת נקודה במישור הדו מימדי. כמו כן המחלקה מנהלת מעקב בעזרת משתנה גלובלי )סטטי( אחר מספר העצמים שנוצרו מהמחלקה בהמשך הקורס נציג מימוש מלא ומעניין יותר של המחלקה, אולם כעת לצורך פשטות הדוגמא נסתפק בבנאי, שדה מחלקה, שני שדות מופע ושלושה שרותי מופע 73

74 public class Point { private static double numofpoints; private double x; private double y; public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return x; public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); public void dosetx(double newx) { x = newx; // More methods... 74

75 PointUser public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); System.out.println("p1.x == " + p1.getx()); 75

76 Point(x,y) this y 2.0 בכל הפעלה של במהלך שרות ריצת מופע או בנאי,בנאי יש ההפניהעצם this מטרה מצביעה שעליו העצם הופעלשזה השרות. עתהההפניה הוקצה this מצביעה )target( לעצם זה STACK HEAP Point.numOfPoints 10 x 1.0 main p1 args [ ] x y public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); public class Point { CODE public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return x; System.out.println("p1.x == " + p1.getx()); public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); public void dosetx(double newx) { x = newx; 76

77 Point(x,y) this y 20.0 STACK HEAP Point.numOfPoints main x 10.0 p2 x y p1 args [ ] x y public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); public class Point { CODE public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return x; System.out.println("p1.x == " + p1.getx()); public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); public void dosetx(double newx) { x = newx; 77

78 dosetx this newx 11.0 this.x הוא העצם = newx עצם הקריאה היא בעצם? המטרה בעצם dosetx(newx) איזה בזימון הקריאה ההשמה עצם שלהוא שרות= x מטרת מופע היא this.dosetx(newx) ההפניה this תצביע לעצם זה שעליו הופעל השרות. setx this STACK HEAP Point.numOfPoints main newx 11.0 p2 x y p1 args [ ] x y public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); public class Point { CODE public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return x; System.out.println("p1.x == " + p1.getx()); public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); this.dosetx(newx); 78 public void dosetx(double newx) { this.x x = newx; = newx;

79 dosetx this newx 21.0 this.x = newx עצם הקריאה היא סוכר? המטרה סוכר תחבירי הואשל תחבירי העצם dosetx(newx) שרות= x מטרת מופעהיא איזה בזימון הקריאה ההשמהשל עצם הוא ( this.dosetx(newxתצביע לעצם זה שעליו של הופעל השרות. ההפניה setx this STACK HEAP Point.numOfPoints main newx 21.0 p2 x y p1 args [ ] x y public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); public class Point { CODE public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return x; System.out.println("p1.x == " + p1.getx()); public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); this.dosetx(newx); 79 public void dosetx(double newx) { this.x x = newx; = newx;

80 איזה המשפט עצם "x הוא מטרת "return הוא הקריאה? בעצם this.x" "return getx main this p2 STACK HEAP x 21.0 y 20.0 Point.numOfPoints 2 11 p1 args [ ] x y p1.x == p1.x == 11 public class PointUser { public static void main(string[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(10.0, 20.0); p1.setx(11.0); p2.setx(21.0); public class Point { CODE public Point(double x, double y){ this.x = x; this.y = y; numofpoints++; public double getx() { return this.x; System.out.println("p1.x == " + p1.getx()); public void setx(double newx) { if(newx > 0.0 && newx < 100.0) dosetx(newx); 80 public void dosetx(double newx) { this.x x = newx; = newx;

81 סיכום ביניים שרותי מופע methods( )instance בשונה משרותי מחלקה )this( פועלים על עצם מסוים )static method( בעוד ששרותי מחלקה פועלים בדרך כלל על הארגומנטים שלהם משתני מופע fields( )instance בשונה ממשתני מחלקה fields( )static הם שדות בתוך עצמים. הם נוצרים רק כאשר נוצר עצם חדש מהמחלקה )ע"י )new בעוד ששדות מחלקה הם משתנים גלובלים. קיים עותק אחד שלהם, שנוצר בעת טעינת קוד המחלקה לזכרון, ללא קשר ליצירת עצמים מאותה המחלקה 81

הקלחמ ה תמרב ת ונ וכ ת (static members ) יליזרב דהוא Java תפשב ם דקת מ תונכת ביבא ל ת תטיסרבינוא

הקלחמ ה תמרב ת ונ וכ ת (static members ) יליזרב דהוא Java תפשב ם דקת מ תונכת ביבא ל ת תטיסרבינוא ת כו נו ת ברמת ה מחלקה (static members) אוהד ברזילי תכנות מ תקד ם בשפת Java אוניברסיטת ת ל אביב static keyword שדות המוגדרים כ static מציינים כי הם מוגדרים ברמת המחלקה ולא ברמת עצם כל העצמים של אותה מחלקה

More information

תוכנה 1 * לא בהכרח בסדר הזה

תוכנה 1 * לא בהכרח בסדר הזה תוכנה 1 תרגול 7: מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה 2 מנשקים מנשקים מנשק )interface( הוא מבנה תחבירי ב- Java המאפשר לחסוך בקוד לקוח. מנשק מכיל כותרות של מתודות המימוש שלהן. )חתימות( ללא קוד אשר

More information

תוכנה 1 סמסטר א' תשע"א

תוכנה 1 סמסטר א' תשעא General Tips on Programming תוכנה 1 סמסטר א' תשע"א תרגול מס' 6 מנשקים, דיאגרמות וביטים * רובי בוים ומתי שמרת Write your code modularly top-down approach Compile + test functionality on the fly Start with

More information

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes תוכנה 1 תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes class Outer { static class NestedButNotInner {... class Inner {... מחלקות מקוננות NESTED CLASSES 2 מחלקה מקוננת Class) )Nested

More information

תוכנה 1 * לא בהכרח בסדר הזה

תוכנה 1 * לא בהכרח בסדר הזה תוכנה 1 תרגול 7: מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה 2 מנשקים מנשקים - תזכורת מנשק )interface( הוא מבנה תחבירי ב- Java המאפשר לחסוך בקוד לקוח. מנשק מכיל כותרות של מתודות )חתימות(. מימוש דיפולטיבי

More information

הנכות 1 םוכיס לוגרת 13 1

הנכות 1 םוכיס לוגרת 13 1 תוכנה 1 סיכום תרגול 13 1 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public abstract int foo1(int i); int foo2(int i); The modifiers

More information

תוכנה 1 טיפוסי השפה טיפוסים לא פרימיטיביים הטיפוסים הפרימיטיביים מחרוזות המרה למספרים תרגול 2: טיפוסי שפה, מחרוזות, מערכים ושגיאות

תוכנה 1 טיפוסי השפה טיפוסים לא פרימיטיביים הטיפוסים הפרימיטיביים מחרוזות המרה למספרים תרגול 2: טיפוסי שפה, מחרוזות, מערכים ושגיאות טיפוסי השפה תוכנה 1 תרגול 2: טיפוסי שפה, מחרוזות, מערכים ושגיאות טיפוסים יסודיים (פרימיטיביים): 8 טיפוסים מוגדרים בשפה שמיועדים להכיל ערכים פשוטים: מספרים שלמים: byte, short, int, long מספרים ממשיים: float,

More information

הנכות 1 םוכיס לוגרת 13 1

הנכות 1 םוכיס לוגרת 13 1 תוכנה 1 סיכום תרגול 13 1 בחינה באופק! הבחינה תכלול את כל הנושאים שכיסינו במהלך הסמסטר: כל ההרצאות כל תרגולים כל תרגילי בית חומר סגור שאלות אמריקאיות 2 קצת על מנשקים מנשק יכול להרחיב שירותים במנשק הם תמיד

More information

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes בית הספר למדעי המחשב אוניברסיטת תל אביב

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes בית הספר למדעי המחשב אוניברסיטת תל אביב תוכנה 1 תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes בית הספר למדעי המחשב אוניברסיטת תל אביב 1 2 STATIC VS. DYNAMIC BINDING 3 Static versus Dynamic Binding public class Account

More information

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב Today Static vs. Dynamic binding Equals / hashcode String Immutability (maybe) 2 Static versus run-time

More information

Algorithms. Intro2CS week 5

Algorithms. Intro2CS week 5 Algorithms Intro2CS week 5 1 Computational problems A computational problem specifies an inputoutput relationship What does the input look like? What should the output be for each input? Example: Input:

More information

תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות

תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of odd numbers: Indices (start from 0) 0 1 2 3 4 5

More information

תוכנה 1 ומחלקות פנימיות

תוכנה 1 ומחלקות פנימיות תוכנה 1 Design Patterns ומחלקות פנימיות תרגול 11: 1 Design Patterns A general reusable solution to recurring design problems. Not a recipe A higher level language for design Factory, Singleton, Observer

More information

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות מערכים מערכים Array: A fixed-length data structure for storing multiple values of the same type Example from last week: An array of odd numbers: Indices

More information

הנכות 1 תואיגש םע תודדומתהו תואלול,םיכרעמ : לו 2 גרת

הנכות 1 תואיגש םע תודדומתהו תואלול,םיכרעמ : לו 2 גרת תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות מערכים Array: A fixed-length data structure for storing multiple values of the same type Example from last week: An array of odd numbers: Indices (start

More information

תרגול 6 רקורסיה ותכנות מונחה עצמים

תרגול 6 רקורסיה ותכנות מונחה עצמים מבוא למדעי המחשב 2017 תרגול 6 רקורסיה ותכנות מונחה עצמים מבוא למדעי המחשב 1 ראינו בהרצאה רקורסיה תכנות מונחה עצמים: מחלקה ואובייקט שדות, בנאים ושיטות מימוש מערך דינאמי של ראשוניים בתרגול היום רקורסיה הדפסת

More information

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions מבוא לתיכנות עם MATLAB 234127 Lecture 5: Boolean logic and Boolean expressions Written by Prof. Reuven Bar-Yehuda, Technion 2013 Based on slides of Dr. Eran Eden, Weizmann 2008 1 >>g = [89 91 80 98]; >>p

More information

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions מבוא לתיכנות עם MATLAB 23427 Lecture 5: Boolean logic and Boolean expressions Written by Prof. Reuven Bar-Yehuda, Technion 203 Based on slides of Dr. Eran Eden, Weizmann 2008 ביטויים לוגיים דוגמא: תקינות

More information

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator מבוא למדעי המחשב 2017 תרגול 8 רשימה משורשרת כללית, Comparator בתרגול היום. LinkedList בניית ההכללה מ- LinkIntList תרגול המבנה ושימושיו ממשקים: Comparator Sorted Linked List ל- LinkedList ע"י שימוש ב- Comparator

More information

תוכנה 1 תרגול 2: מערכים ומבני בקרה

תוכנה 1 תרגול 2: מערכים ומבני בקרה תוכנה 1 תרגול 2: מערכים ומבני בקרה 2 Useful Eclipse Shortcuts Ctrl+1 quick fix for errors, or small refactoring suggestions Ctrl+SPACE code content assist (auto-completion) Auto completion for main create

More information

Tutorial 10. Introduction to C++ שימו

Tutorial 10. Introduction to C++ שימו Introduction to ++ שימו תרגול זה אינו התרגול הרישמי של הקורס. הוא מבוסס על חוברת התרגולים אך מכיל שינויים, הסברים נוספים ודוגמאות שונות או נוספות. + + תוכנ ית רא שונה ב הכרו ת עם + + תרגול // First ++

More information

תוכנה 1 * לא בהכרח בסדר הזה

תוכנה 1 * לא בהכרח בסדר הזה תוכנה 1 תרגול 7: מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה 2 מנשקים מנשקים מנשק )interface( הוא מבנה תחבירי ב- Java המאפשר לחסוך בקוד לקוח. מנשק מכיל כותרות של מתודות המימוש שלהן. )חתימות( ללא קוד אשר

More information

היצביט ומ - ןוכית ת וי נבת

היצביט ומ - ןוכית ת וי נבת תבני ו ת תיכון Patterns) (Design תבנ יו ת תיכון - מו טיבציה בחיי היום יום אנחנו מתארים דברים תוך שימוש בתבניות חוזרות: "מכונית א' היא כמו מכונית ב', אבל יש לה 2 דלתות במקום 4" "אני רוצה ארון כמו זה, אבל

More information

הנכות 1 םוכיס לוגרת 13 1

הנכות 1 םוכיס לוגרת 13 1 תוכנה 1 סיכום תרגול 13 1 בחינה באופק! הבחינה תכלול את כל הנושאים שכיסינו במהלך הסמסטר: כל ההרצאות כל תרגולים כל תרגילי בית חומר סגור שאלות אמריקאיות 2 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים

More information

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13 1 תוכנה 1 תרגול מספר 13 ו- HashCode Equals עוד על טיפוסים מוכללים )Advanced Generics( חריגים )Exceptions( בית הספר למדעי המחשב אוניברסיטת תל אביב 1 2 ו- HASHCODE EQUALS 3 תזכורת: המחלקה Object package

More information

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13 1 2 תוכנה 1 תרגול מספר 13 ו- HashCode Equals עוד על טיפוסים מוכללים )Advanced Generics( ו- HASHCODE EQUALS חריגים )Exceptions( בית הספר למדעי המחשב אוניברסיטת תל אביב 1 3 4 package java.lang; תזכורת: המחלקה

More information

ASP.Net Web API.

ASP.Net Web API. ASP.Net Web API 1 מה זה? Web API View בלבד ולא Data אותו מממש השרת והוא מחזיר לקליינט API הוא Web API הבקשה והתשובה הן בפרוטוקול Http\Https הקליינטים של Web API יכולים להיות רבים : אפשר להשתמש גם בMVC

More information

תכנות מתקדם בשפת C משתנים

תכנות מתקדם בשפת C משתנים תכנות מתקדם בשפת C משתנים 1 משתנים סוגי משתנים בשפת C ההבדלים בין סוגי המשתנים השונים 2 /* This program computes m to the power of n */ /* Assumptions: m is an integer; n is a positive integer */ #include

More information

מבוא לתכנות ב- JAVA תרגול 6

מבוא לתכנות ב- JAVA תרגול 6 מבוא לתכנות ב- JAVA תרגול 6 מה בתרגול )methods( פונקציות/שיטות ב- Java הגדרת פונקציה קריאה/הפעלה העברת ארגומנטים ערכי החזרה מבוא לפונקציות- שימוש חוזר בקוד נניח שבמהלך תוכנית נדרשתם לחשב את הסכום של המספרים

More information

Computer Programming A תרגול 9

Computer Programming A תרגול 9 Computer Programming A תרגול 9 1 מטרת התרגול הקצאת זיכרון מבנים רשימות דינאמית ניהול הזיכרון בתוכנית עד כה כל המשתנים שראינו היו לוקאליים. משך הקיום של משתנים מקומיים הוא הזמן אשר הפונקציה בה הם נמצאים

More information

מבוא לתכנות ב- JAVA תרגול 7

מבוא לתכנות ב- JAVA תרגול 7 מבוא לתכנות ב- JAVA תרגול 7 רקורסיה - הקדמה הגדרה רקורסיבית: חדר הוא מסודר אם צד שמאל שלו מסודר שלו מסודר. וצד ימין שיטת פתרון רקורסיבית: פתרון מופעים פשוטים יותר של בעיה בכדי לפתור את הבעיה המקורית רקורסיה

More information

Introduction to Programming in C תרגול 8

Introduction to Programming in C תרגול 8 Introduction to Programming in C תרגול 8 1 1 נושאים מצביעים רקע אופרטורים על מצביעים מצביעים כפרמטרים לפונקציה הקצאה דינמית מבנים תאור הזיכרון של המחשב: מצביעים ניתן לחשוב על זיכרון המחשב כעל רצף של תאים,

More information

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf(bla\n); 8. return 0; 9. } שאלה : (4 נקודות) א. ב. ג. (5 נקודות) הגדירו את המונח race-condition במדוייק לא להשמיט פרטים. ספקו דוגמא. (5 נקודות) מהו? Monitor נא לספק הגדרה מלאה. ( נקודות) ( נקודות) ציינו כמה תהליכים יווצרו בקוד הבא

More information

תכנות מונחה עצמים משחקים תשע"ו

תכנות מונחה עצמים משחקים תשעו move semantics 1 תכנות מונחה עצמים ופיתוח משחקים תשע"ו סמנטיקת ההעברה semantics( )Move move semantics 2 מטרה האצה של התוכניות, שיפור בביצועים על ידי חסכון בבנייה והעתקה של אובייקטים זמניים move semantics

More information

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2 מבוא למדעי המחשב תירגול 2: לולאות, קלט, וטיפוסים 1 תוכנייה לולאת while קלט טיפוסי משתנים המרת טיפוסים טיפוס char 2 לולאת while 3 לולאת while קטע קוד מתבצע שוב ושוב כל עוד תנאי מתקיים int number = 40; while(number>0)

More information

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1 מערכים שעור מס. 4 דרור טובי דר' כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1 למה מערכים? ברצוננו לאחסן בתוכנית ציוני בחינה כדי לחשב את ממוצע הציונים וסטיית התקן. נניח ש 30 סטודנטים לקחו

More information

הנכות 1 םוכיס לוגרת 14 1

הנכות 1 םוכיס לוגרת 14 1 תוכנה 1 סיכום תרגול 14 1 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public abstract int foo1(int i); int foo2(int i); The modifiers

More information

דף הדרכה ליצירת שרת/ לקוח עם GUI

דף הדרכה ליצירת שרת/ לקוח עם GUI דף הדרכה ליצירת שרת/ לקוח עם GUI בשיעורים הקודמים למדנו כיצד ליצור שרת לקוח פשוט, ויצירת טופס המכיל פקדים כלומר יצירת GUI למשתמש, בשיעור זה נרצה להראות את הדרך לשילוב בין השניים כלומר ליצור לקוח client

More information

קורס תכנות כתובות בזיכרון כתובות בזכרון מצביעים וכתובות מצביעים וכתובות שיעור שביעי: מבנים, הקצאת זיכרון דינאמית האופרטור &

קורס תכנות כתובות בזיכרון כתובות בזכרון מצביעים וכתובות מצביעים וכתובות שיעור שביעי: מבנים, הקצאת זיכרון דינאמית האופרטור & כתובות בזיכרון קורס תכנות int x = 10; char c = a ; 10 784658 'a' 26537 שם x כתובת 784658 שיעור שביעי: מבנים, הקצאת זיכרון דינאמית 26537 c 1 הגדרת מצביע variable( )pointer כתובות בזכרון האופרטור & מחזיר

More information

מבוא לתכנות ב- JAVA מעבדה 2

מבוא לתכנות ב- JAVA מעבדה 2 מבוא לתכנות ב- JAVA מעבדה 2 מה בתרגול טיפוסים פרימיטיביים המרות טיפוסים אופרטורים יחסיים ולוגיים משפט if-else בתרגול הקודם טיפוסים פרימיטביים לייצוג מספרים שלמים וממשיים ואופרטורים לפעולות בין מספרים.1

More information

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService {

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService { Simple Web Service WS פתיחת פרוייקט File New Project ASP.Net web service project - >http://localhost/webservice1 יצירת שירות המחשב חיבור וחילוק 2 מספרים : הטיפוסים הבסיסיים using System; איסוף וניהוף אוספי

More information

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp)

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp) הנחיות כלליות: תאריך הבוחן: 10.5.2018 שם המרצה: מני אדלר,מיכאל אלחדד, ירון גונן מבחן בקורס: עקרונות שפות תכנות מס' קורס: 202-1-2051 מיועד לתלמידי: מדעי המחשב והנדסת תוכנה שנה: ב' סמסטר: ב' משך הבוחן: 2

More information

מבוא למדעי המחשב תירגול 3:

מבוא למדעי המחשב תירגול 3: מבוא למדעי המחשב תירגול 3: לולאות, קלט, וטיפוסים תוכנייה לולאת while קלט טיפוסי משתנים המרת טיפוסים טיפוס char מבוא למדעי המחשב מ' - תירגול 3 2 לולאת while מבוא למדעי המחשב מ' - תירגול 3 3 לולאת while

More information

קורס תכנות שיעור שני: שימוש במשתנים,

קורס תכנות שיעור שני: שימוש במשתנים, קורס תכנות שיעור שני: שימוש במשתנים, בקרת זרימה, לולאות 1 נושאי השיעור היום משתנים )variables( טיפוסי משתנים בשפת C הגדרת משתנים השמה למשתנים פעולות על משתנים קליטת ערכים מהמשתמש הדפסה משתנים בקרת זרימה

More information

פרק 15 טיפוס חדש: מבנים שימוש במבנים שימוש במבנים שימוש במבנים

פרק 15 טיפוס חדש: מבנים שימוש במבנים שימוש במבנים שימוש במבנים פרק 15 ב- C מבנים טיפוס חדש: מבנים 1 מבנה (structure) הוא טיפוס מורכב בשפת C (בניגוד לטיפוס בסיסי). זהו טיפוס שמיועד לאיחוד קבוצת משתנים תחת שם אחד. משתנים אלו נקראים השדות של המבנה, והם יכולים להיות מטיפוסים

More information

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Loop through Arrays. Array Creation and Initialization

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Loop through Arrays. Array Creation and Initialization מערכים תוכנה 1 Array: A fixed-length data structure for storing multiple values of the same type Example from last week: An array of odd numbers: Indices (start from 0) 0 1 2 3 4 5 6 7 תרגול 2: מערכים

More information

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Array Creation and Initialization. Loop through Arrays

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Array Creation and Initialization. Loop through Arrays מערכים Array: A fixed-length data structure for storing multiple values of the same type תוכנה 1 Example: An array of odd numbers: Indices (start from 0) 0 1 2 3 4 5 6 7 odds: 1 3 5 7 9 11 13 15 odds.length

More information

תוכנה 1 3 תרגול מס' מערכים ומבני בקרה

תוכנה 1 3 תרגול מס' מערכים ומבני בקרה תוכנה 1 3 תרגול מס' מערכים ומבני בקרה מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of odd numbers: Indices (start from 0) 0 1 2 3 4 5 6 7 odds:

More information

Engineering Programming A

Engineering Programming A Engineering Programming A תרגול 5 25.11.2012 מערכים חד-מימדיים )תזכורת( לדוגמא: מערך בשם Arr בגודל 8 שאיבריו מטיפוס int 3 7 5 6 8 1 23 16 0 1 2 3 4 5 6 7 ב - arr[0] ב יושב ערך שהוא המספר השלם 3 arr[1]

More information

מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development(

מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development( מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development( תוכנה 1 תרגול 8 String Immutability Strings are constants String s = " Tea "; s = s.trim(); s = s.replace('t', 'S'); s 1 2 3 " Tea " "Tea" "Sea"

More information

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1 משתנים שעור מס. 2 דרור טובי דר' כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1 תפקיד המשתנים הצהרה על משתנה השמת ערך במשתנה int a, b, c; a = 1234; b = 99; c = a + b; משתנים מאפשרים לנו לשמור

More information

תוכנה 1 בשפת Java תרגול מספר 9: הורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

תוכנה 1 בשפת Java תרגול מספר 9: הורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב תרגול מספר 9: הורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב ירושה ממחלקות קיימות ראינו בהרצאה שתי דרכים לשימוש חוזר בקוד של מחלקה קיימת: הכלה + האצלה ירושה המחלקה היורשת יכולה להוסיף פונקציונליות שלא

More information

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5 מבוא לתכנות ב- JAVA תרגול 5 Ipc161- practical session 5 מה בתרגול מערכים דו ממדיים )methods( פונקציות/שיטות ב- Java הגדרת פונקציה קריאה/הפעלה העברת ארגומנטים ערכי החזרה מערך דו ממדי מערך של מערכים חד ממדיים

More information

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון. מבוא לתכנות תוכנית ראשונה שעור מס. 1 דרור טובי דר' 1 מבוא לתכנות בשפת ++C C \ שלום!! מרצה ד"ר דרור טובי, drorto@ariel.ac.il שעות קבלה: יום ב, 10-12 טלפון )אריאל( 03 9076547 אתר הקורס: http://www.ariel.ac.il/cs/pf/tdror/courses/cpp

More information

קורס תכנות שיעור שישי: מחרוזות, מצביעים

קורס תכנות שיעור שישי: מחרוזות, מצביעים קורס תכנות שיעור שישי: מחרוזות, מצביעים מערכים אוסף סדור של משתנים מאותו סוג המשתנים נמצאים ברצף בזיכרון העברת מערך לפונקציה Define רקורסיה במערך מערכים דו מימדיים 2 מחרוזות מהי מחרוזת? רצף של תוים ייצוג

More information

תור שימושים בעולם התוכנה

תור שימושים בעולם התוכנה מבוא למדעי המחשב הרצאה : Queue, Iterator & Iterable תור מבנה נתונים אבסטרקטי תור שימושים בעולם התוכנה השימושים של תורים בעולם התוכנה מזכירים מאוד תורים במציאות: )VoIP( )YouTube( מקלדת שידור סרט באינטרנט

More information

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen מבוא לתכנות בשפת C מצביעים והקצאה דינאמית כתובות של משתנים לכל משתנה כתובת של המקום שלו בזיכרון כבר ראינו: שם של מערך הוא למעשה הכתובת של התא הראשון )באינדקס 0( של המערך להזכירכם: תא של מערך הינו משתנה

More information

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים מבוא למדעי המחשב הרצאה 2: עצי חיפוש בינאריים תזכורת: עץבינארי בנוסףלרשימהמקושרת ומערך, הצגנומבנהנתונים קונקרטיחדש עץבינארי עץבינארימורכבמ: שורש תת-עץשמאלי תת-עץימני A B C D E F G 2 תזכורת: שורש ותתי-עצים

More information

$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h>

$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h> תכנות בסיסי בשפת C תוכנית ראשונה תוכנית ב - C מורכבת מאוסף פונקציות והגדרות טיפוסים. C איננה שפה object oriented כך שאין בה מושגים של מחלקה ואובייקט. נתחיל בתוכנית הראשונה המסורתית, זו המדפיסה הודעה יחידה

More information

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> } נושאי התרגול: מה הן פונקציות הגדרת פונקציה,קריאה לפונקציה העברת ארגומנטים,החזרת ערך או void העברת משתנים פרימיטיביים ומערכים לפונקציה העמסה של פונקציות תרגול 4 פונקציות מוטיבציה לעיתים,אנו נזקקים לבצע

More information

שיעור מספר 8: "אמא יש רק אחת" )הורשה I(

שיעור מספר 8: אמא יש רק אחת )הורשה I( שיעור מספר 8: "אמא יש רק אחת" )הורשה I( שחר מעוז בית הספר למדעי המחשב על סדר היום יחסים בין מחלקות ירושה כיחס is-a טיפוס סטטי וטיפוס דינמי המחלקה Object מחלקות מופשטות 2 מלבן צבעוני נרצה לבנות מחלקה המייצגת

More information

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions מבוא לתיכנות עם MATLAB 234127 Lecture 5: Boolean logic and Boolean expressions Written by Prof. Reuven Bar-Yehuda, Technion 2013 Based on slides of Dr. Eran Eden, Weizmann 2008 1 motivation Proper academic

More information

תרגול 3 מערכים ופונקציות

תרגול 3 מערכים ופונקציות מבוא למדעי המחשב 2017 תרגול 3 מערכים ופונקציות מערכים מאפשרים עבודה עם מקבצים של נתונים פונקציות מאפשרות אבסטרקציה והאחדה של הקוד ראינו בהרצאה מערכים הצהרה, אתחול, גישה לאיברים במערך יצוג בזיכרון ובטבלת

More information

Object-Oriented Analysis and Design

Object-Oriented Analysis and Design Object-Oriented Analysis and Design Session 2a: Structure Modeling Object-Oriented Analysis and Design 1 Outline 1. Objects and Classes 4 2. Basic Association Concepts.17 3. Class Diagrams and Object (instance)

More information

Programming in C תרגול 8

Programming in C תרגול 8 Programming in C תרגול 8 1 1 נושאים מצביעים רקע אופרטורים על מצביעים מצביעים כפרמטרים לפונקציה הקצאת זיכרון דינאמית Malloc free מצביעים תאור הזיכרון של המחשב: ניתן לחשוב על זיכרון המחשב כעל רצף של תאים,

More information

הנדסת תוכנה 11. מבוא לתבניות תיכון. se15b-yagel 1

הנדסת תוכנה 11. מבוא לתבניות תיכון. se15b-yagel 1 הנדסת תוכנה 11. מבוא לתבניות תיכון se15b-yagel 1 מה היום? מבוא לתבניות תיכון Design Patterns הדגמה כולל BDD ו- Refactoring לפי הזמן, השלמת בקרת תצורה: Git Workflows בהמשך: עקרונות תיכון מונחה עצמים עבודה

More information

תוכנה 1. תרגול 1: סביבת העבודה ומבוא ל- Java

תוכנה 1. תרגול 1: סביבת העבודה ומבוא ל- Java תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1718b/ מתרגלים: ברית יונגמן )שעת קבלה: רביעי ב- 9:00 בתיאום מראש( שי גרשטיין )שעת קבלה: רביעי ב- 18:00,

More information

Nir Adar

Nir Adar שפת Java למתכנתי ++C - חלק שני מסמך זה הורד מהאתר. אין להפיץ מסמך זה במדיה כלשהי, ללא אישור מפורש מאת המחבר. מחבר המסמך איננו אחראי לכל נזק, ישיר או עקיף, שיגרם עקב השימוש במידע המופיע במסמך, וכן לנכונות

More information

Object-Oriented Programming Concepts

Object-Oriented Programming Concepts Object-Oriented Programming Concepts Object-oriented programming מונחה עצמים) (תכנות involves programming using objects An object ) represents (עצם an entity in the real world that can be distinctly identified

More information

תרגול מספר 3: מערכים

תרגול מספר 3: מערכים היום בתרגול:.1.2 תרגול מספר 3: מערכים מערך חד-מימדי: מה זה מערך ולמה צריך אותו? איך מגדירים? איך זה נראה בזכרון? דוגמאות לשימוש במערך חד-מימדי השוואה בין משתנה פרימיטיבי למשתנה שאינו פרימיטיבי מערך דו-מימדי:

More information

Java פעולות עוברות בירושה סביבת יסודות מדעי המחשב נספח הורשה

Java פעולות עוברות בירושה סביבת יסודות מדעי המחשב נספח הורשה 1 נספח הורשה פעולות עוברות בירושה.1 הפעולה ToString המחלקה קלף Card נכתוב את המחלקה המגדירה עצם מסוג קלף. תכונות המחלקה: מחרוזת המתארת את צורת הקלף )תלתן, מעוין, לב, עלה( מספר שלם בתחום 13-1 )כולל( המהווה

More information

Enumerated Types טיפוסי מנייה בית הספר למדעי המחשב אוניברסיטת תל אביב

Enumerated Types טיפוסי מנייה בית הספר למדעי המחשב אוניברסיטת תל אביב Enumerated Types טיפוסי מנייה בית הספר למדעי המחשב אוניברסיטת תל אביב Enumerated Types טיפוסים שכל מופעיהם קבועים וידועים מראש שכיחים מאוד בעולם התוכנה: package cards.domain; public class PlayingCard {

More information

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C בשיעור הקודם למדנו על רקורסיה פתרנו את בעיית מגדלי הנוי בעזרת רקורסיה כלומר בעזרת פונקציה שקוראת לעצמה. רקורסיה מאפשרת לנו לפתור בעיה "גדולה" בעזרת פתרון של בעיות "קטנות" המרכיבות אותה. קורס תכנות שיעור

More information

Smart Pointers Nir Adar

Smart Pointers Nir Adar 7.1.2005 גירסה 1.00 Smart Pointers מסמך זה הורד מהאתר. אין להפיץ מסמך זה במדיה כלשהי, ללא אישור מפורש מאת המחבר. מחבר המסמך איננו אחראי לכל נזק, ישיר או עקיף, שיגרם עקב השימוש במידע המופיע במסמך, וכן לנכונות

More information

Advanced Lab in Computer Communications Meeting 1 Layers Model, Codes, Ethernet. Instructor: Tom Mahler

Advanced Lab in Computer Communications Meeting 1 Layers Model, Codes, Ethernet. Instructor: Tom Mahler Advanced Lab in Computer Communications Meeting 1 Layers Model, Codes, Ethernet Instructor: Tom Mahler Course Objective הודעות כלליות מעבר על דף מידע OSI Model Classical 7 layers model IP model Application

More information

כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה

כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבנה זכרון ושפת ++C קוד הקורס: 7027810 תאריך בחינה: שאלות לדוגמא משך הבחינה: שעתיים שם המרצים: ד"ר אופיר פלא, ד"ר מירי בן ניסן חומר עזר: פתוח שימוש במחשבון:

More information

ENUMERATED TYPES טיפוסי מנייה שחר מעוז תוכנה 1 בשפת ג'אווה אוניברסיטת תל אביב

ENUMERATED TYPES טיפוסי מנייה שחר מעוז תוכנה 1 בשפת ג'אווה אוניברסיטת תל אביב ENUMERATED TYPES טיפוסי מנייה שחר מעוז אוניברסיטת תל אביב ENUMERATED TYPES package cards.domain; public class PlayingCard { טיפוסים שכל מופעיהם קבועים וידועים מראש שכיחים מאוד בעולם התוכנה: // pseudo enumerated

More information

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num)

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num) 1 תבנית צבירה תבניות אלגוריתמיות לפעולות רקורסיביות תבנית צבירה לסדרת ערכים: סכום (סדרת ערכים) החזר את ערך הקצה + סכום (סדרת הערכים ללא ערך הקצה) דוגמא: פעולה המחזירה את סכום הספרות שבמספר שלם לא שלילי

More information

ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים. .vector. list iterator נכיר תחילה את האוסף הפשוט ביותר בספריה

ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים. .vector. list iterator נכיר תחילה את האוסף הפשוט ביותר בספריה ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים vector list iterator 2 קיימת בכל מימוש של ++C מכילה אוספים (Containers) ואלגוריתמים נכיר תחילה את האוסף הפשוט ביותר בספריה.vector מערך

More information

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

פתרון מוצע לבחינת מהט ב_שפת c מועד אביב תשעח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות שאלה מספר 1 התוכנית מגדירה חמישה משתנים שלמים: השלושה הראשונים הם שלושה מצביעים - *s *t,i. j ושלושה נוספים

More information

מבוא למדעי המחשב תרגול 13: עצים בינאריים

מבוא למדעי המחשב תרגול 13: עצים בינאריים מבוא למדעי המחשב תרגול 13: עצים בינאריים עצים בינאריים - הגדרה הגדרה: עץ בינארי הוא עץ ריק (בלי צמתים) או עץ המורכב משורש ושני תתי-עצים, הוא עץ בינארי. ימני ושמאלי, שכל אחד מהם תרגיל 1 עץ בינארי מסודר

More information

Practical Session - Heap

Practical Session - Heap Practical Session - Heap Heap Heap Maximum-Heap Minimum-Heap Heap-Array A binary heap can be considered as a complete binary tree, (the last level is full from the left to a certain point). For each node

More information

במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן

במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: שאלות חזרה למבחן. חשוב: אין להסיק ששאלות אחרות לא יכולות להישאל במבחן, אין להסיק כי נושאים מסויימים בסיליבוס

More information

עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter.

עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter. עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter. Type Inference System The Type Inference System is a Scheme Implementation of the algorithm for Type Checking and Inference

More information

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כה תשרי תשעח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א' אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : א' מועד קיץ סמ' שנה תשע"ז 3 שעות משך

More information

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים תוכנה 1 תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב פיתוח התוכנית בשלב זה אנו משתמשים במהדר )קומפיילר( כדי להמיר קבצי.java )קבצי

More information

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3 מבוא לתכנות ב- JAVA מעבדה 3 Ipc161-lab3 נושאי התרגול ניפוי שגיאות לולאות בדיקת תרגילים בקורס )השוואת פלטים למול הפתרון המצופה( כיצד להפנות את פלט התוכנית לקובץ טקסט איך להשוות תכנים של שני קבצים בעזרת

More information

3 Dynamic Routing A (RIP and OSPF)

3 Dynamic Routing A (RIP and OSPF) אוניברסיטת בן גוריון בנגב המחלקה להנדסת מערכות תקשורת רשתות תקשורת מחשבים - 2 קורס 37110211 מעבדה בתקשורת מחשבים 3 Dynamic Routing A (RIP and OSPF) בשבוע (29/11/2011) 5 בשבוע (13/12/2011) 7 מעבדה מספר

More information

מבוא למדעי המחשב השפעת השינוי על סטודנט הרצאה 18: פולימורפיזם ומחלקות אבסטרקטיות אם ברצוננו ששכר הלימוד לא יעלה על 2500.

מבוא למדעי המחשב השפעת השינוי על סטודנט הרצאה 18: פולימורפיזם ומחלקות אבסטרקטיות אם ברצוננו ששכר הלימוד לא יעלה על 2500. public class { private static final int COURSE_PRICE = 1000; private String nae; private int id; private int nuofcourses; מבוא למדעי המחשב הרצאה 18 פולימורפיזם ומחלקות אבסטרקטיות תזכורת public (int id,

More information

תרגול 3 מערכים ופונקציות

תרגול 3 מערכים ופונקציות מבוא למדעי המחשב 2018 תרגול 3 מערכים ופונקציות מערכים מאפשרים עבודה עם מקבצים של נתונים פונקציות מאפשרות אבסטרקציה והאחדה של הקוד ראינו בהרצאה מערכים הצהרה, אתחול, גישה לאיברים במערך יצוג בזיכרון ובטבלת

More information

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner Communication Networks (0368-3030) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University Allon Wagner Kurose & Ross, Chapter 3.5.5, 3.7 (5 th ed.) Many slides adapted from: J. Kurose

More information

ממשק משתמש גרפי בעזרת SWT

ממשק משתמש גרפי בעזרת SWT ממשק משתמש גרפי בעזרת SWT מה עושים היום? קריאת Stack Trace של חריגה hashcode ו- equals ממשק משתמש גרפי תוכנה 1 בשפת Java 2 1 Interpreting Stack Trace of an Exception Exception in thread "main" java.lang.outofmemoryerror:

More information

מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א. I x > a. פתרון 2: משפט switch

מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א. I x > a. פתרון 2: משפט switch 1 מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות שאלה פרק א :1 m a b k k b x I x > a II x < b פלט I && II 0 8 12 8 4 1 9 11 2 10 11 9 8 2 12 35 13 העמודות המסומנות בכחול אינן עמודות חובה בפתרון. שאלה 2:

More information

141214 20219031 1 Object-Oriented Programming concepts Object-oriented programming ( תכנות מונחה עצמים ) involves programming using objects An object ) (עצם represents an entity in the real world that

More information

שפת XML הפכה להיות נפוצה ובעלת תפקידים רבים, במיוחד עקב גמישותה הרבה:

שפת XML הפכה להיות נפוצה ובעלת תפקידים רבים, במיוחד עקב גמישותה הרבה: שעור extensible Markup Language - XML 11 XML היא שפת סימון בדומה ל- HTML, גם XML היא שפת סימון. XML איננה שפת תכנות שמאפשרת פיתוח תכניות אשר מבצעות פעולות חישוב. בדומה ל- HTML גם XML מורכבת, למעשה, מתגיות

More information

Introduction to OOP. Contents:

Introduction to OOP. Contents: 11/9/2014 Introduction to OOP. Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Martin Fowler) Presented by: Contents: History; C refrain;

More information

Practical Session No. 14 Topological sort,amortized Analysis

Practical Session No. 14 Topological sort,amortized Analysis Practical Session No. 14 Topological sort,amortized Analysis Topological- Sort Topological sort Ordering of vertices in a directed acyclic graph (DAG) G=(V,E) such that if there is a path from v to u in

More information

Graph Database, think different!

Graph Database, think different! Graph Database, think different! Written by Roni Licher Winter 2014-2015 236363 - Database Systems - Technion Nodes Edges (directed or not) Properties Neo4j and Cypher 4j Graph database (Like SQL server

More information

תרגול 12. Standard Template Library כתיבת אלגוריתמים גנריים מצביעים חכמים

תרגול 12. Standard Template Library כתיבת אלגוריתמים גנריים מצביעים חכמים תרגול 12 Standard Template Library כתיבת אלגוריתמים גנריים מצביעים חכמים ספרית התבניות הסטנדרטית קיימת בכל מימוש של ++C מכילה אוספים (Containers) ואלגוריתמים. משתמשת בתבניות :(templates) אוספי הנתונים

More information

תרגילים ופתרונות בשפת - C הסתעפויות

תרגילים ופתרונות בשפת - C הסתעפויות תרגילים ופתרונות בשפת - C הסתעפויות כתב וערך: שייקה בילו תרגיל - 1 כתוב תוכנית שתקבל מהמשתמש שלושה מספרים, ותציג את הגדול מביניהם על המסך. #include void main() int mis1, mis2, mis3, max; printf("please

More information